from openai import OpenAI
from typing import Dict, Any

class OpenAIChat:
    def __init__(self, api_key: str):
        # 初始化 OpenAI 客户端，指定 API Key 和 DeepSeek API 的访问地址
        self.client = OpenAI(
            api_key=api_key,
            base_url="https://api.deepseek.com/v1"  # DeepSeek API endpoint
        )
    
    def _format_context(self, sensor_data: Dict[str, float], device_states: Dict[str, Any]) -> str:
        """
        格式化传感器和设备数据为上下文信息。
        将当前环境的传感器数据和设备状态拼接为结构化文本，
        作为 AI 聊天的上下文输入。
        :param sensor_data: 当前传感器数据字典
        :param device_states: 当前设备状态字典
        :return: 格式化后的上下文字符串
        """
        context = "当前环境状态：\n"
        
        # 添加传感器数据
        context += f"温度：{sensor_data['temperature']}°C\n"
        context += f"湿度：{sensor_data['humidity']}%\n"
        context += f"水位：{sensor_data['water_level']}%\n\n"
        
        # 添加设备状态
        context += "设备状态：\n"
        context += f"空调：{'运行中' if device_states['ac']['running'] else '关闭'}，"
        context += f"模式：{device_states['ac']['mode']}，"
        context += f"设定温度：{device_states['ac']['temperature']}°C\n"
        
        context += f"除湿器：{'运行中' if device_states['dehumidifier']['running'] else '关闭'}，"
        context += f"模式：{device_states['dehumidifier']['mode']}，"
        context += f"目标湿度：{device_states['dehumidifier']['target']}%\n"
        
        context += f"水阀：{'开启' if device_states['valve']['running'] else '关闭'}，"
        context += f"开度：{device_states['valve']['opening']}%，"
        context += f"流量：{device_states['valve']['flow']} L/min\n"
        
        return context
    
    def generate_response(self, user_query: str, sensor_data: Dict[str, float], device_states: Dict[str, Any]) -> str:
        """
        生成智能回答。
        将用户问题、当前传感器数据和设备状态一同发送给 DeepSeek Chat API，
        获取 AI 生成的回复。
        :param user_query: 用户输入的问题
        :param sensor_data: 当前传感器数据
        :param device_states: 当前设备状态
        :return: AI 生成的回复字符串
        """
        context = self._format_context(sensor_data, device_states)
        
        try:
            # 调用 OpenAI Chat API，获取 AI 回复
            response = self.client.chat.completions.create(
                model="deepseek-chat",  # DeepSeek model name
                messages=[
                    {
                        "role": "system",
                        "content": "你是一个智能设备管理助手，能够根据传感器数据和设备状态提供智能分析和建议。请用自然、友好的方式回答用户的问题。"
                    },
                    {
                        "role": "user",
                        "content": f"{context}\n\n用户问题：{user_query}"
                    }
                ],
                temperature=0.7,
                max_tokens=500
            )
            
            # 返回 AI 回复内容
            return response.choices[0].message.content
            
        except Exception as e:
            # 网络或其他异常，返回错误信息
            return f"抱歉，处理请求时出现错误：{str(e)}" 